package com.hcss.sys.menu.model.vo;

import com.hcss.sys.menu.constant.MenuConstants;
import com.hcss.sys.menu.model.HcSysMenu;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import org.apache.commons.collections.CollectionUtils;

import java.util.LinkedList;
import java.util.List;

/**
 * @描述: 菜单前台展示类
 * @作者: fangtao
 * @创建日期: 2019-01-07 16:59
 * @公司 浙江鸿程计算机系统有限公司
 */
@Getter
@Setter
@ToString(callSuper = true)
public class HcSysMenuVO extends HcSysMenu {
    /**
     * 子菜单
     */
    List<HcSysMenuVO> menuList;

    public static List<HcSysMenuVO> build(List<HcSysMenuVO> menus) {
        List<HcSysMenuVO> menuList = new LinkedList<>();
        if (CollectionUtils.isEmpty(menus)) {
            return menuList;
        }
        for (int i = 0; i < menus.size(); i++) {
            if (MenuConstants.ROOT_FATHER_ID.equalsIgnoreCase(menus.get(i).getFatherid())) {
                // 获取子菜单
                getSubMenu(menus.get(i), menus.subList(i + 1, menus.size()));
                menuList.add(menus.get(i));
            }
        }
        return menuList;
    }

    /**
     * 获取子菜单
     * @param fatherMenu 父菜单
     * @param menus 菜单集合
     * @return
     */
    private static void getSubMenu(HcSysMenuVO fatherMenu, List<HcSysMenuVO> menus) {
        if (CollectionUtils.isEmpty(menus)) {
            return;
        }
        List<HcSysMenuVO> subMenu = new LinkedList<>();
        for (int i = 0; i < menus.size(); i++) {
            if (fatherMenu.getId().equalsIgnoreCase(menus.get(i).getFatherid())) {
                getSubMenu(menus.get(i), menus.subList(i + 1, menus.size()));
                subMenu.add(menus.get(i));
            }
        }
        fatherMenu.setMenuList(subMenu);
    }
}
